<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>lorisread</title>
    <link rel="stylesheet" type="text/css" href="csound.css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <link rel="home" href="index.html" title="The Canonical Csound Reference Manual" />
    <link rel="up" href="OpcodesTop.html" title="Orchestra Opcodes and Operators" />
    <link rel="prev" href="lorenz.html" title="lorenz" />
    <link rel="next" href="lorismorph.html" title="lorismorph" />
  </head>
  <body>
    <div class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">lorisread</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="lorenz.html">Prev</a> </td>
          <th width="60%" align="center">Orchestra Opcodes and Operators</th>
          <td width="20%" align="right"> <a accesskey="n" href="lorismorph.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="refentry">
      <a id="lorisread"></a>
      <div class="titlepage"></div>
      <a id="IndexLorisRead" class="indexterm"></a>
      <div class="refnamediv">
        <h2>
          <span class="refentrytitle">lorisread</span>
        </h2>
        <p>lorisread — Imports a set of bandwidth-enhanced partials from a SDIF-format
    data file, applying control-rate frequency, amplitude, and
    bandwidth scaling envelopes, and stores the modified partials in
    memory.
           </p>
      </div>
      <div class="refsect1">
        <a id="idp120424480"></a>
        <h2>Syntax</h2>
        <pre class="synopsis"><span class="command"><strong>lorisread</strong></span> ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]</pre>
      </div>
      <div class="refsect1">
        <a id="idp120496272"></a>
        <h2>Description</h2>
        <p>lorisread imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying control-rate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory.
    </p>
      </div>
      <div class="refsect1">
        <a id="idp120497648"></a>
        <h2>Initialization</h2>
        <p><span class="emphasis"><em>ifilcod </em></span> - integer or character-string
denoting a control-file derived from reassigned bandwidth-enhanced
analysis of an audio signal. An integer denotes the suffix of a file
loris.sdif (e.g. loris.sdif.1); a character-string (in double quotes)
gives a filename, optionally a full pathname. If not a full pathname, the
file is sought first in the current directory, then in the one given
by the environment variable SADIR (if defined). The reassigned
bandwidth-enhanced data file contains breakpoint frequency, amplitude,
noisiness, and phase envelope values organized for bandwidth-enhanced
additive resynthesis. The control data must conform to one of the SDIF
formats that can be</p>
        <p>Loris stores partials in SDIF RBEP frames. Each RBEP frame
contains one RBEP matrix, and each row in a RBEP matrix describes one
breakpoint in a Loris partial. A RBEL frame containing one RBEL matrix
describing the labeling of the partials may precede the first RBEP
frame in the SDIF file. The RBEP and RBEL frame and matrix definitions
are included in the SDIF file's header. In addition to RBEP frames,
Loris can also read and write SDIF 1TRC frames. Since 1TRC frames do
not represent bandwidth-enhancement or the exact timing of Loris
breakpoints, their use is not recommended. 1TRC capabilities are
provided to allow interchange with programs that are unable to handle
RBEP frames.</p>
        <p><span class="emphasis"><em>istoreidx, ireadidx, isrcidx, itgtidx</em></span> are
labels that identify a stored set of bandwidth-enhanced
partials. lorisread imports partials from a SDIF file and stores them
with the integer label istoreidx. lorismorph morphs sets of partials
labeled isrcidx and itgtidx, and stores the resulting partials with
the integer label istoreidx. lorisplay renders the partials stored
with the label ireadidx. The labels are used only at initialization
time, and may be reused without any cost or benefit in efficiency, and
without introducing any interaction between instruments or
instances.</p>
        <p><span class="emphasis"><em>ifadetime (optional)</em></span> - In general,
partials exported from Loris begin and end at non-zero amplitude. In
order to prevent artifacts, it is very often necessary to fade the
partials in and out, instead of turning them abruptly on and
off. Specification of a non-zero ifadetime causes partials to fade in
at their onsets and to fade out at their terminations. This is
achieved by adding two more breakpoints to each partial: one ifadetime
seconds before the start time and another ifadetime seconds after the
end time. (However, no breakpoint will be introduced at a time less
than zero. If necessary, the onset fade time will be shortened.) The
additional breakpoints at the partial onset and termination will have
the same frequency and bandwidth as the first and last breakpoints in
the partial, respectively, but their amplitudes will be zero. The
phase of the new breakpoints will be extrapolated to preserve phase
correctness. If no value is specified, ifadetime defaults to
zero. Note that the fadetime may not be exact, since the partial
parameter envelopes are sampled at the control rate (krate) and
indexed by ktimpnt (see below), and not by real time.</p>
      </div>
      <div class="refsect1">
        <a id="idp120505120"></a>
        <h2>Performance</h2>
        <p>lorisread reads pre-computed Reassigned Bandwidth-Enhanced
analysis data from a file stored in SDIF format, as described
above. The passage of time through this file is specified by ktimpnt,
which represents the time in seconds. ktimpnt must always be positive,
but can move forwards or backwards in time, be stationary or
discontinuous, as a pointer into the analysis file. kfreqenv is a
control-rate transposition factor: a value of 1 incurs no
transposition, 1.5 transposes up a perfect fifth, and .5 down an
octave. kampenv is a control-rate scale factor that is applied to all
partial amplitude envelopes. kbwenv is a control-rate scale factor
that is applied to all partial bandwidth or noisiness envelopes. The
bandwidth-enhanced partial data is stored in memory with a specified
label for future access by another generator.</p>
      </div>
      <div class="refsect1">
        <a id="idp120507152"></a>
        <h2>Examples</h2>
        <p>
      Here is an example of the lorisread opcode. It uses the file <a class="ulink" href="examples/lorisread.csd" target="_top"><em class="citetitle">lorisread.csd</em></a>.
      </p>
        <div class="example">
          <a id="idp120509008"></a>
          <p class="title">
            <strong>Example 441. Example of the lorisread opcode.</strong>
          </p>
          <div class="example-contents">
            <p>See the sections <a class="link" href="UsingRealTime.html" title="Real-Time Audio"><em class="citetitle">Real-time Audio</em></a> and <a class="link" href="CommandFlags.html" title="Csound command line"><em class="citetitle">Command Line Flags</em></a> for more information on using command line flags.</p>
            <pre class="programlisting">
<span class="csdtag">&lt;CsoundSynthesizer&gt;</span>
<span class="csdtag">&lt;CsOptions&gt;</span>
<span class="comment">; Select audio/midi flags here according to platform</span>
-odac      <span class="comment">;;;realtime audio out</span>
<span class="comment">;-iadc    ;;;uncomment -iadc if realtime audio input is needed too</span>
<span class="comment">; For Non-realtime ouput leave only the line below:</span>
<span class="comment">; -o lorisread.wav -W ;;; for file output any platform</span>
<span class="csdtag">&lt;/CsOptions&gt;</span>
<span class="csdtag">&lt;CsInstruments&gt;</span>

<span class="ohdr">sr</span> <span class="op">=</span> 44100
<span class="ohdr">ksmps</span> <span class="op">=</span> 32
<span class="ohdr">nchnls</span> <span class="op">=</span> 2
<span class="ohdr">0dbfs</span>  <span class="op">=</span> 1

<span class="comment">; Play the partials in clarinet.sdif from 0 to 3 sec with 1 ms fadetime</span>
<span class="comment">; and no frequency , amplitude, or bandwidth modification.</span>

<span class="oblock">instr</span> 1

ktime <span class="opc">linseg</span> 0, p3, 3			<span class="comment">; linear time function from 0 to 3 seconds</span>
      lorisread	ktime, "clarinet.sdif", 1, 1, 1, 1, .001
asig  lorisplay	1, 1, 1, 1
      <span class="opc">outs</span> asig, asig
<span class="oblock">endin</span>


<span class="comment">; Play the partials in clarinet.sdif from 0 to 3 sec with 1 ms fadetime</span>
<span class="comment">; adding tuning and vibrato, increasing the "breathiness" (noisiness) and overall</span>
<span class="comment">; amplitude, and adding a highpass filter.</span>

<span class="oblock">instr</span> 2

ktime <span class="opc">linseg</span> 0, p3, 3			<span class="comment">; linear time function from 0 to 3 seconds</span>
					<span class="comment">; compute frequency scale for tuning  </span>
ifscale	<span class="op">=</span> <span class="opc">cpspch</span>(p4)<span class="op">/</span><span class="opc">cpspch</span>(8.08)	<span class="comment">; (original pitch was G#4)</span>
					<span class="comment">; make a vibrato envelope</span>
kvenv  <span class="opc">linseg</span> 0, p3<span class="op">/</span>6, 0, p3<span class="op">/</span>6, .02, p3<span class="op">/</span>3, .02, p3<span class="op">/</span>6, 0, p3<span class="op">/</span>6, 0
kvib   <span class="opc">oscil</span>  kvenv, 4, 1		<span class="comment">; table 1, sinusoid</span>
kbwenv <span class="opc">linseg</span> 1, p3<span class="op">/</span>6, 1, p3<span class="op">/</span>6, 2, 2<span class="op">*</span>p3<span class="op">/</span>3, 2	<span class="comment">;lots of noise</span>
       lorisread ktime, "clarinet.sdif", 1, 1, 1, 1, .001
a1     lorisplay 1, ifscale<span class="op">+</span>kvib, 2, kbwenv
asig   <span class="opc">atone</span> a1, 1000			<span class="comment">; highpass filter, cutoff 1000 Hz</span>
       <span class="opc">outs</span>  asig, asig
<span class="oblock">endin</span>

<span class="csdtag">&lt;/CsInstruments&gt;</span>
<span class="csdtag">&lt;CsScore&gt;</span>
<span class="comment">; a sinus</span>
<span class="stamnt">f</span> 1 0 4096 10 1

<span class="stamnt">i</span> 1    0      3
<span class="stamnt">i</span> 1    +      1
<span class="stamnt">i</span> 1    +      6
<span class="stamnt">s</span>

<span class="comment">;                  pitch</span>
<span class="stamnt">i</span> 2      1    3    8.08
<span class="stamnt">i</span> 2      3.5  1    8.04
<span class="stamnt">i</span> 2      4    6    8.00
<span class="stamnt">i</span> 2      4    6    8.07
<span class="stamnt">e</span>
<span class="csdtag">&lt;/CsScore&gt;</span>
<span class="csdtag">&lt;/CsoundSynthesizer&gt;</span>
</pre>
          </div>
        </div>
        <p><br class="example-break" />
    </p>
      </div>
      <div class="refsect1">
        <a id="idp120513296"></a>
        <h2>Credits</h2>
        <p>This implementation of the Loris unit generators was written by Kelly
Fitz (<a class="ulink" href="mailto:loris@cerlsoundgroup.org" target="_top">loris@cerlsoundgroup.org</a>). It is patterned after a prototype implementation of the
<span class="emphasis"><em>lorisplay</em></span> unit generator written by Corbin Champion, and based on the
method of Bandwidth-Enhanced Additive Synthesis and on the sound
morphing algorithms implemented in the Loris library for sound
modeling and manipulation. The opcodes were further adapted as a
plugin for Csound 5 by Michael Gogins.</p>
      </div>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="lorenz.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="OpcodesTop.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="lorismorph.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">lorenz </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> lorismorph</td>
        </tr>
      </table>
    </div>
  </body>
</html>
